{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8fa523cc-332b-40b8-8ad4-3ae21529298c",
   "metadata": {},
   "outputs": [],
   "source": [
    "#将特征变量（data）与标签（target）分别储存于数组x和y中\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "data_url='http://lib.stat.cmu.edu/datasets/boston'\n",
    "raw_df=pd.read_csv(data_url,sep=\"\\s+\",skiprows=22,header=None)\n",
    "data=np.hstack([raw_df.values[::2,:],raw_df.values[1::2,:2]])\n",
    "target=raw_df.values[1::2,2]\n",
    "x,y=data,target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "79e0cb86-1d2a-4bfb-b488-6d21a0da4995",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Linear模型的预测准确率为:0.78363\n",
      "Ridge模型的预测准确率为:0.78905\n",
      "Lasso模型的预测准确率为:0.66948\n"
     ]
    }
   ],
   "source": [
    "#分别\n",
    "from sklearn.linear_model import LinearRegression,Ridge,Lasso\n",
    "from sklearn.model_selection import train_test_split\n",
    "import matplotlib.pyplot as plt\n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1,test_size=0.3)\n",
    "lr=LinearRegression()\n",
    "rd=Ridge()\n",
    "ls=Lasso()\n",
    "models=[lr,rd,ls]\n",
    "names=['Linear','Ridge','Lasso']\n",
    "for model,name in zip(models,names):\n",
    "    model.fit(x_train,y_train)\n",
    "    score=model.score(x_test,y_test)\n",
    "    print(\"%s模型的预测准确率为:%.5f\"%(name,score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3ff21e8a-48c4-4264-9696-4eedffa2d97a",
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "'float' object is not subscriptable",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[6], line 13\u001b[0m\n\u001b[0;32m     11\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i,name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(names):\n\u001b[0;32m     12\u001b[0m     plt\u001b[38;5;241m.\u001b[39msubplot(\u001b[38;5;241m2\u001b[39m,\u001b[38;5;241m2\u001b[39m,i\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m---> 13\u001b[0m     plt\u001b[38;5;241m.\u001b[39mplot(\u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(alphas)),score[i],\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mg-\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m     14\u001b[0m     plt\u001b[38;5;241m.\u001b[39mtitle(name)\n\u001b[0;32m     15\u001b[0m     \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m模型的最大预测准确率为:\u001b[39m\u001b[38;5;132;01m%.5f\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m%\u001b[39m(name,\u001b[38;5;28mmax\u001b[39m(scores[i])))\n",
      "\u001b[1;31mTypeError\u001b[0m: 'float' object is not subscriptable"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "scores=[]\n",
    "alphas=[0.0001,0.0005,0.001,0.005,0.01,0.05,0.1,0.5,1,5,10,50]\n",
    "for index,model in enumerate(models):\n",
    "    scores.append([])\n",
    "    for alpha in alphas:\n",
    "        if index>0:\n",
    "            model.alpha=alpha\n",
    "        model.fit(x_train,y_train)\n",
    "        scores[index].append(model.score(x_test,y_test))\n",
    "fit=plt.figure(figsize=(10,7))\n",
    "for i,name in enumerate(names):\n",
    "    plt.subplot(2,2,i+1)\n",
    "    plt.plot(range(len(alphas)),score[i],'g-')\n",
    "    plt.title(name)\n",
    "    print(\"%s模型的最大预测准确率为:%.5f\"%(name,max(scores[i])))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0ea8495f-8f2f-447c-834e-53d2e40ffd49",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
